/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年5月14日
 * <修改描述:>
 */
package com.tx.component.attachment.context;

import java.io.IOException;
import java.util.List;

import com.tx.component.attachment.args.AttachmentDetailAddArgs;
import com.tx.component.attachment.args.AttachmentDetailDeleteArgs;
import com.tx.component.attachment.args.AttachmentDetailQueryArgs;
import com.tx.component.attachment.args.AttachmentDetailSaveArgs;
import com.tx.component.attachment.model.AttachmentDetail;
import com.tx.core.paged.model.PagedList;

/**
 * 文件容器对象存储引擎<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年5月14日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public interface AttachmentEngine {
    
    /**
     * 删除文件<br/>
     * <功能详细描述>
     * @param attachmentId [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    void delete(AttachmentDetailDeleteArgs deleteArgs);
    
    /**
     * 查询附件详情<br/>
     * <功能详细描述>
     * @param attachmentId
     * @return [参数说明]
     * 
     * @return AttachmentDetail [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    AttachmentDetail findById(String attachmentId);
    
    /**
     * 根据附件ID查询附件详情<br/>
     * <功能详细描述>
     * @param attachmentId
     * @return [参数说明]
     * 
     * @return AttachmentDetail [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    AttachmentDetail findByRelativePath(String relativePath, String catalog);
    
    /**
     * 统计符合条件的附件数量<br/>
     * <功能详细描述>
     * @param queryArgs
     * @return [参数说明]
     * 
     * @return int [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    int count(AttachmentDetailQueryArgs queryArgs);
    
    /**
     * 查询附件清单<br/>
     * <功能详细描述>
     * @param queryArgs
     * @return [参数说明]
     * 
     * @return List<AttachmentDetail> [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    List<AttachmentDetail> list(AttachmentDetailQueryArgs queryArgs);
    
    /**
     * 分页查询附件清单<br/>
     * <功能详细描述>
     * @param queryArgs
     * @param pageIndex
     * @param pageSize
     * @return [参数说明]
     * 
     * @return PagedList<AttachmentDetail> [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    PagedList<AttachmentDetail> pages(AttachmentDetailQueryArgs queryArgs,
            int pageIndex, int pageSize);
    
    /**
     * 保存文件<br/>
     * 如果文件已经存在，则复写当前文件<br/>
     * 如果文件不存在，则创建文件后写入<br/>
     * 如果对应文件所在的文件夹不存在，对应文件夹会自动创建<br/>
     *
     * @param catalog 文件存储目录
     * @param relativePath 存储路径,此存储路径为文件全路径(包括扩展名)
     * @param input        文件流
     * 
     * @return FileDefinitionDetail 文件定义的实体,以及文件对应访问地址,权限等
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    AttachmentDetail save(String catalog, AttachmentDetailSaveArgs saveArgs);
    
    /**
     * 新增文件<br/>
     * 如果文件已经存在，则抛出异常<br/>
     * 如果文件不存在，则创建文件后写入<br/>
     * 如果对应文件所在的文件夹不存在，对应文件夹会自动创建<br/>
     *
     * @param catalog 文件存储目录
     * @param relativePath 存储路径,此存储路径为文件全路径(包括扩展名)
     * @param input        文件流
     * 
     * @return FileDefinitionDetail 文件定义的实体,以及文件对应访问地址,权限等
     * @throws IOException 
     * @throws throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    AttachmentDetail add(String catalog, AttachmentDetailAddArgs addArgs);
}
